今天继续对于栈的用法进行学习,实现了一个检查括号是否匹配的程序。但我觉得在switch语句上应该还有优化空间的,代码如下,用到了之前我构建的stacklib库:
#include "stacklib.h"
#include <string.h>
#ifndef INPUT_MAX_LENGTH
#define INPUT_MAX_LENGTH 50
#endif
int main(int argc, char const *argv[]) {
char str[INPUT_MAX_LENGTH+1];
fgets (str,INPUT_MAX_LENGTH,stdin);
stack *brackets=StackCreate();
bool is_match=true;
for (int i=0;i<strlen(str);i++)
{
if (strchr("{[(",str[i])!=NULL)
{
StackPush(brackets,str[i]);
}
if (strchr("}])",str[i])!=NULL)
{
char pop_ch,compare_ch;
pop_ch=StackPop(brackets);
if (pop_ch==POP_ERR)
is_match=false;
switch (pop_ch) {
case '(':
compare_ch=')';
break;
case '[':
compare_ch=']';
break;
case '{':
compare_ch='}';
break;
default:
break;
}
if (compare_ch!=str[i])
is_match=false;
}
}
if (!StackIsEmpty(brackets))
{
is_match=false;
}
puts (is_match?"TRUE":"FALSE");
return 0;
}